﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Comun;
using Onshi.POS.Comun.Vistas;
using Onshi.POS.Modelo.Entidades.Tipos;

namespace Onshi.POS.Formularios.Controles
{
    public partial class TiposFormasPagosSeleccionarMultiple : UserControl, ITiposFormasPagosSeleccionarMultiple
    {
        #region Constructores

        public TiposFormasPagosSeleccionarMultiple()
        {
            InitializeComponent();
            presentador = new TiposFormasPagosSeleccionarMultiplePresentador(this);
        }

        #endregion

        #region Atributos

        private TiposFormasPagosSeleccionarMultiplePresentador presentador;
        private Boolean estanSeleccionados = true;
        private List<Byte> idTiposFormasPagosSeleccionados = new List<Byte>();
        private Boolean agregando = false;
        public delegate void SeleccionadoHandler();
        public event SeleccionadoHandler Seleccionado = delegate { };

        #endregion

        #region Metodos

        public void Actualizar()
        {
            presentador.Actualizar();
        }

        public void LimpiarCampos()
        {
            agregando = true;
            for (Int32 i = 0; i < lstTiposFormasPagos.Items.Count; i++)
                lstTiposFormasPagos.SetItemChecked(i, true);
            agregando = false;
            Seleccionado();
        }

        #endregion

        #region Propiedades

        [Browsable(false)]
        public List<Byte> IdTiposFormasPagosSeleccionados
        {
            get { return idTiposFormasPagosSeleccionados; }
        }

        [Browsable(false)]
        public List<TipoFormaPago> ListadoTiposFormasPagos
        {
            set
            {
                agregando = true;
                estanSeleccionados = true;
                lstTiposFormasPagos.Items.Clear();
                foreach (var item in value)
                    lstTiposFormasPagos.Items.Add(item, true);
                agregando = false;
            }
        }

        #endregion

        #region Eventos

        private void btnMarcarDesmarcar_Click(Object sender, EventArgs e)
        {
            agregando = true;
            for (var i = 0; i < lstTiposFormasPagos.Items.Count; i++)
                lstTiposFormasPagos.SetItemChecked(i, !estanSeleccionados);
            estanSeleccionados = !estanSeleccionados;
            agregando = false;
            Seleccionado();
        }

        private void lstBarrios_ItemCheck(Object sender, ItemCheckEventArgs e)
        {
            idTiposFormasPagosSeleccionados.Clear();
            foreach (TipoFormaPago item in lstTiposFormasPagos.CheckedItems)
                idTiposFormasPagosSeleccionados.Add(item.Id);
            if (e.NewValue == CheckState.Checked)
                idTiposFormasPagosSeleccionados.Add(((TipoFormaPago)lstTiposFormasPagos.Items[e.Index]).Id);
            else if (e.NewValue == CheckState.Unchecked)
                idTiposFormasPagosSeleccionados.Remove(((TipoFormaPago)lstTiposFormasPagos.Items[e.Index]).Id);

            if (!agregando)
                Seleccionado();
        }

        #endregion
    }
}
